home *** CD-ROM | disk | FTP | other *** search
- /*
- * VirtuaLight's binary .VIB format API, sample 5
- * Written by Stephane Marty, 09/26/2001
- *
- * This sample program writes a binary VIB file
- * describing a simple NURBS sphere.
- */
-
- #include "..\vlBinDef.h"
-
- #ifdef WIN32
- #pragma warning( disable : 4305 )
- #endif
-
- #define U_PTS 7
- #define U_ORD 4
- #define V_PTS 11
- #define V_ORD 4
-
- // The following data define a nurbs sphere
- viDBL knU[U_PTS+U_ORD] = { 0.0, 0.0, 0.0, 0.0, 0.25, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0 };
- viDBL knV[V_PTS+V_ORD] = { -0.25, -0.25, -0.125, 0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0, 1.125, 1.25, 1.25 };
- viVECTOR CPoints[U_PTS][V_PTS] = {
- { {0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000},{0.000000, 0.893874, 0.000000} },
- { {0.506728, 0.893874, 0.506728},{0.716622, 0.893874, 0.000000},{0.506728, 0.893874, -0.506728},{0.000000, 0.893874, -0.716622},{-0.506728, 0.893874, -0.506728},{-0.716622, 0.893874, 0.000000},{-0.506728, 0.893874, 0.506728},{0.000000, 0.893874, 0.716622},{0.506728, 0.893874, 0.506728},{0.716622, 0.893874, 0.000000},{0.506728, 0.893874, -0.506728} },
- { {1.562462, 1.442352, 1.562462},{2.209655, 1.442352, 0.000000},{1.562462, 1.442352, -1.562462},{0.000000, 1.442352, -2.209655},{-1.562462, 1.442352, -1.562462},{-2.209655, 1.442352, 0.000000},{-1.562462, 1.442352, 1.562462},{0.000000, 1.442352, 2.209655},{1.562462, 1.442352, 1.562462},{2.209655, 1.442352, 0.000000},{1.562462, 1.442352, -1.562462} },
- { {2.198094, 3.428569, 2.198094},{3.108574, 3.428569, 0.000000},{2.198094, 3.428569, -2.198094},{0.000000, 3.428569, -3.108574},{-2.198094, 3.428569, -2.198094},{-3.108574, 3.428569, 0.000000},{-2.198094, 3.428569, 2.198094},{0.000000, 3.428569, 3.108574},{2.198094, 3.428569, 2.198094},{3.108574, 3.428569, 0.000000},{2.198094, 3.428569, -2.198094} },
- { {1.562462, 5.414785, 1.562462},{2.209655, 5.414785, 0.000000},{1.562462, 5.414785, -1.562462},{0.000000, 5.414785, -2.209655},{-1.562462, 5.414785, -1.562462},{-2.209655, 5.414785, 0.000000},{-1.562462, 5.414785, 1.562462},{0.000000, 5.414785, 2.209655},{1.562462, 5.414785, 1.562462},{2.209655, 5.414785, 0.000000},{1.562462, 5.414785, -1.562462} },
- { {0.506728, 5.963264, 0.506728},{0.716622, 5.963264, 0.000000},{0.506728, 5.963264, -0.506728},{0.000000, 5.963264, -0.716622},{-0.506728, 5.963264, -0.506728},{-0.716622, 5.963264, 0.000000},{-0.506728, 5.963264, 0.506728},{0.000000, 5.963264, 0.716622},{0.506728, 5.963264, 0.506728},{0.716622, 5.963264, 0.000000},{0.506728, 5.963264, -0.506728} },
- { {0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000},{0.000000, 5.963264, 0.000000} }
- };
-
- void main(void)
- {
- viNURBS *nurbs;
- viCAMERA *cam;
- viGENERAL *gen;
- viSHAPE_MODIFIERS *sm;
- viPOINT_LIGHT *pl;
- viFILE *vib;
- viINT i, j;
-
- // Open a new VIB file
- vib = viNewBinaryVIB("sample7.vib");
-
- // Add the camera (low adaptive antialiasing enabled)
- cam = viNewCamera();
- viSetInt(cam->Format.X, 256);
- viSetInt(cam->Format.Y, 256);
- viSetDbl(cam->FrameAspectRatio, 1.0);
- viSetVector(&cam->Location, 2, 5, -10);
- viSetVector(&cam->LookAt, 0, 3, 1);
- viSetVector(&cam->UpAxis, 0, 1, 0);
- viSetDbl(cam->FieldOfView, 40);
- viSetInt(cam->Antialiasing, 1);
- viDumpCamera(cam, vib);
- free(cam);
-
- // Set the background color
- gen = viNewGeneral();
- viSetColor(&gen->Background, 0.098039*2, 0.098039*2, 0.392157*2);
- viDumpGeneral(gen, vib);
- free(gen);
-
- // Add two pointlights
- pl = viNewPointLight();
- viSetColor(&pl->Intensity, 0.6, 0.6, 0.6);
- viSetVector(&pl->Position, 5, 15, -15);
- viDumpPointLight(pl, vib);
- viSetColor(&pl->Intensity, 0.6, 0.6, 0.6);
- viSetVector(&pl->Position, -20, 25, -20);
- viDumpPointLight(pl, vib);
- free(pl);
-
- /*
- * create the NURBS (nu=7, uorder=4, nv=11, vorder=4)
- */
- nurbs = viNewNURBS(U_PTS, U_ORD, V_PTS, V_ORD);
- for (i=0; i<nurbs->nuknots; i++)
- nurbs->uknot[i] = knU[i];
- for (i=0; i<nurbs->nvknots; i++)
- nurbs->vknot[i] = knV[i];
- for (i=0;i<nurbs->nu;i++)
- for (j=0;j<nurbs->nv;j++)
- viSetControlPoint(&nurbs->cpoints[i][j],
- CPoints[i][j].x,
- CPoints[i][j].y,
- CPoints[i][j].z);
- // dump the nurbs
- viPrimitive(vib);
- viDumpNURBS(nurbs, vib);
- viPrimitiveShaderName("nurbs_ball", vib);
- sm = viNewShapeModifiers();
- viSetInt(sm->ShapeSubdivisions.u, 14);
- viSetInt(sm->ShapeSubdivisions.v, 22);
- viSetDbl(sm->RenderBound.umin, 0.0);
- viSetDbl(sm->RenderBound.vmin, 0.0);
- viSetDbl(sm->RenderBound.umax, 1.0);
- viSetDbl(sm->RenderBound.vmax, 1.0);
- viDumpShapeModifiers(sm, vib);
- viEndPrimitive(vib);
- viDeleteNURBS(nurbs);
- free(sm);
-
- // Close the VIB file
- viCloseBinaryVIB(vib);
- }